package com.xinchao.dao;

import com.xinchao.model.User;
import com.xinchao.model.dto.UserListDTO;
import com.xinchao.model.vo.UserRoleSelectListVO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper {
	/**
	 * 保存用户
	 *
	 * @param user User
	 */
	void insertUser(User user);

	/**
	 * 保存用户角色关系
	 *
	 * @param userId 用户ID
	 */
	void insertUserRole(@Param("userId") Long userId, @Param("roleIdArray") String[] roleIdArray);

	/**
	 * 保存用户部门关系
	 *
	 * @param userId       用户ID
	 * @param departmentId 部门ID
	 */
	void insertUserDepartment(@Param("userId") Long userId, @Param("departmentId") Long departmentId);

	/**
	 * 修改用户
	 *
	 * @param user User
	 */
	void updateUserById(User user);

	/**
	 * 通过用户名获取用户
	 *
	 * @param userName 用户名
	 * @return User(用户)
	 */
	User getUserByUserName(String userName);

	/**
	 * 获取用戶列表
	 *
	 * @param status       状态
	 * @param userName     用户名
	 * @param departmentId 部门ID
     * @return PageInfo<UserListVO>
	 */
	Page<UserListDTO> listUser(@Param("status") Integer status, @Param("userName") String userName, @Param("departmentId") Long departmentId);

	/**
	 * 获取用户所属角色列表
	 *
	 * @param userId 用户ID
	 * @return List<String>（角色名列表）
	 */
	List<UserRoleSelectListVO> listUserRoleName(Long userId);

	/**
	 * 通过用户ID删除用户角色关系
	 *
	 * @param userId 用户ID
	 */
	void deleteUserRoleByUserId(Long userId);

	/**
	 * 通过用户ID删除用户部门关系
	 *
	 * @param userId 用户ID
	 */
	void deleteUserDepartmentByUserId(Long userId);

	/**
	 * 通过用户ID获取用户
	 *
	 * @param userId 用户ID
	 * @return User(用户)
	 */
	User getUserById(Long userId);

	/**
	 * 通过姓名获取用户
	 *
	 * @param realName 姓名
	 * @return User(用户)
	 */
	User getUserByRealName(String realName);

	/**
	 * 修改密码
	 *
	 * @param userId   用户ID
	 * @param password 密码
	 */
	void updatePassword(@Param("userId") Long userId, @Param("password") String password);

	/**
	 * 启用禁用用户
	 *
	 * @param userId 用户ID
	 * @param status 状态
	 */
	void enableDisableUser(@Param("userId") Long userId, @Param("status") Integer status);


}